#!/usr/bin/python
from slides import Slide, Bullet, SubBullet, URL
from twslides import Lecture

lecture = Lecture(
    "Twisted Conch: SSH in Python",
    Slide("Introduction",
    ),
    Slide("Other implementations (servers)",
        Bullet("OpenSSH",
            SubBullet(URL("http://www.openssh.org")),
        ),
        Bullet("FSecure SSH",
            SubBullet(URL("http://www.f-secure.com/products/ssh/")),
        ),
        Bullet("LSH",
            SubBullet(URL("http://www.lysator.liu.se/~nisse/lsh/")),
        ),
    ),
    Slide("Other implementations (clients)",
        Bullet("PuTTY",
            SubBullet(URL("http://www.chiark.greenend.org.uk/~sgtatham/putty/")),
        ),
        Bullet("TeraTerm",
            SubBullet(URL("http://www.ayera.com/teraterm/")),
        ),
        Bullet("MindTerm",
            SubBullet(URL("http://www.appgate.com/mindterm/")),
        ),
    ),
    Slide("Why Twisted?",
        Bullet("Asynchronous"),
        Bullet("Python"),
        Bullet("High-Level"),
    ),
    Slide("No Forking or Threads",
        Bullet("Forking is expensive"),
        Bullet("Threads are complicated/expensive, esp. in Python"),
        Bullet("Asynch means no worrying about any of that"),
        Bullet("Makes running a session 2x as fast in Conch as in OpenSSH"),
    ),
    Slide("Security - No Pointers",
        SubBullet("No buffer overflows"),
        SubBullet("No off-by-1 errors"),
        SubBullet("No malloc/free bugs"),
        SubBullet("No arbitrary code execution"),
    ),
    Slide("Security - High Level",
        Bullet("Strong built-in library"),
        Bullet("Exceptions"),
    ),
    Slide("Security - Not Root",
        Bullet("Limits vulnerablity in a compromise"),
        Bullet("Allows use of process limits/etc."),
    ),
    Slide("Interfacing with other software",
        Bullet("OpenSSH interacts only through separate processes",
            SubBullet("Expensive"),
            SubBullet("Complicated"),
        ),
        Bullet("Conch can interact in-process",
            SubBullet("Faster"),
            SubBullet("Easy integration to other Twisted and Python libraries"),
        ),
    ),
    Slide("Speed",
        Bullet("C is faster than Python"),
        Bullet("Interpreter cost is high for the client"),
        Bullet("FSH-style connection caching helps a bit"),
        Bullet("Psyco helps as well"),
    ),
    Slide("Age",
        Bullet("Conch is new",
            SubBullet("First commit was July 15, 2002"),
        ),
        Bullet("Hasn't had a security aduit"),
        Bullet("Shouldn't be used in security-critical systems"),
    ),
    Slide("Applications with Conch",
        Bullet("Reality: MUD framework"),
        Bullet("Insults: async. replacement for curses in Conch apps"),
    ),
    Slide("Future Directions",
        Bullet("Generic authentication forwarding"),
        Bullet("Work on applications"),
        Bullet("Auditing of the code"),
        Bullet("Increase speed"),
        Bullet("SFTP/SCP"),
        Bullet("Key Agent"),
        Bullet("DNSSEC"),
    ),
    Slide("Conclusion",
        Bullet("Working implementation in Python"),
        Bullet("Much room for improvement"),
    ),
)

lecture.renderHTML(".", "conch-%d.html", css="main.css") 
